package com.example.demo.config;

import com.example.demo.controller.UserLogController;
import com.example.demo.service.Impl.UserLogServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

@Component
@EnableScheduling
@Slf4j
public class ScheduledTasks {

    private UserLogServiceImpl userLogService;

    // 固定延迟执行，任务完成后间隔 5 秒再次执行
//    @Scheduled(fixedDelay = 5000)
//    public void fixedDelayTask() {
//        System.out.println("Fixed delay task executed at " + System.currentTimeMillis());
//    }

//    // 固定速率执行，每隔 3 秒执行一次
//    @Scheduled(fixedRate = 3000)
//    public void fixedRateTask() {
//        System.out.println("Fixed rate task executed at " + System.currentTimeMillis());
//    }

    // 使用 Cron 表达式，每天凌晨 2 点执行
    //    6 个字段：秒 分 小时 日 月 周
    //    7 个字段：秒 分 小时 日 月 周 年
    //
    // *（星号）表示匹配该字段的所有值
    // ?（问号）只能用在 “日” 和 “周” 字段中，表示不指定具体的值。因为 “日” 和 “周” 字段会相互影响，所以当其中一个字段确定了具体值时，另一个字段就需要用 ? 来表示不指定
    // -（连字符）表示一个范围。
    //,（逗号）含义：表示多个值。
    ///（斜杠）含义：表示递增间隔。
    @Scheduled(cron = "0 0 0 ? * 7")
    public void deleteUserLog() {
        log.info("delete all user log" + LocalDateTime.now());
        userLogService.deleteAllUserLog();
    }
}